from datetime import datetime
from flask import Blueprint, request, jsonify, current_app, g
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
from flasgger import swag_from
from app import db
from app.models.admin import Admin, Role, Permission
from app.utils.decorators import admin_login_required
from app.api.v1 import api_v1
from app.api.v1.docs.admin_docs import (
    ADMIN_LOGIN_DOC, GET_ADMIN_INFO_DOC
)

# 不再创建子蓝图，直接使用主蓝图
# admin_auth = Blueprint('admin_auth', __name__)

@api_v1.route('/admin/login', methods=['POST'])
@swag_from(ADMIN_LOGIN_DOC)
def login():
    """管理员登录"""
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')
    
    if not username or not password:
        return jsonify({'code': 400, 'message': '用户名和密码不能为空', 'data': None}), 400
    
    admin = Admin.query.filter_by(username=username).first()
    if not admin or not admin.verify_password(password):
        return jsonify({'code': 401, 'message': '用户名或密码错误', 'data': None}), 401
    
    if not admin.is_active:
        return jsonify({'code': 403, 'message': '账号已被禁用', 'data': None}), 403
    
    # 生成JWT令牌，确保使用字符串类型的subject
    access_token = create_access_token(identity=str(admin.id))
    
    # 更新最后登录时间
    admin.last_login = db.func.now()
    db.session.commit()
    
    return jsonify({
        'code': 200, 
        'message': '登录成功', 
        'data': {
            'token': access_token,
            'admin': admin.to_dict()
        }
    })

@api_v1.route('/admin/info', methods=['GET'])
@swag_from(GET_ADMIN_INFO_DOC)
@admin_login_required
def get_admin_info():
    """获取管理员信息"""
    admin_id = g.admin_id
    admin = Admin.query.get(admin_id)
    if not admin:
        return jsonify({'code': 404, 'message': '管理员不存在', 'data': None}), 404
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': admin.to_dict()
    })

@api_v1.route('/admin/admins', methods=['GET'])
@swag_from({
    'tags': ['管理员管理'],
    'summary': '获取管理员列表',
    'description': '获取系统中所有管理员的列表信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'page',
            'in': 'query',
            'type': 'integer',
            'default': 1,
            'description': '页码'
        },
        {
            'name': 'per_page',
            'in': 'query',
            'type': 'integer',
            'default': 10,
            'description': '每页数量'
        },
        {
            'name': 'keyword',
            'in': 'query',
            'type': 'string',
            'description': '搜索关键词（用户名或姓名）'
        }
    ],
    'responses': {
        '200': {
            'description': '获取成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '获取成功'},
                    'data': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                'id': {'type': 'integer', 'description': '管理员ID'},
                                'username': {'type': 'string', 'description': '用户名'},
                                'name': {'type': 'string', 'description': '姓名'},
                                'email': {'type': 'string', 'description': '邮箱'},
                                'phone': {'type': 'string', 'description': '电话'},
                                'is_active': {'type': 'boolean', 'description': '是否激活'},
                                'created_at': {'type': 'string', 'description': '创建时间'},
                                'last_login': {'type': 'string', 'description': '最后登录时间'}
                            }
                        }
                    }
                }
            }
        },
        '401': {'description': '未授权访问'},
        '500': {'description': '服务器内部错误'}
    }
})
@admin_login_required
def get_admin_list():
    """获取管理员列表"""
    page = request.args.get('page', 1, type=int)
    per_page = request.args.get('per_page', 10, type=int)
    
    admins = Admin.query.paginate(page=page, per_page=per_page)
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': {
            'items': [admin.to_dict() for admin in admins.items],
            'total': admins.total,
            'page': admins.page,
            'per_page': admins.per_page,
            'pages': admins.pages
        }
    })

@api_v1.route('/admin/admins/<int:admin_id>', methods=['GET'])
@swag_from({
    'tags': ['管理员管理'],
    'summary': '获取管理员详情',
    'description': '获取指定管理员的详细信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'admin_id',
            'in': 'path',
            'type': 'integer',
            'required': True,
            'description': '管理员ID'
        }
    ],
    'responses': {
        '200': {
            'description': '获取成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '获取成功'},
                    'data': {
                        'type': 'object',
                        'properties': {
                            'id': {'type': 'integer', 'description': '管理员ID'},
                            'username': {'type': 'string', 'description': '用户名'},
                            'name': {'type': 'string', 'description': '姓名'},
                            'email': {'type': 'string', 'description': '邮箱'},
                            'phone': {'type': 'string', 'description': '电话'},
                            'is_active': {'type': 'boolean', 'description': '是否激活'},
                            'roles': {'type': 'array', 'description': '角色列表'},
                            'created_at': {'type': 'string', 'description': '创建时间'},
                            'last_login': {'type': 'string', 'description': '最后登录时间'}
                        }
                    }
                }
            }
        },
        '401': {'description': '未授权访问'},
        '404': {'description': '管理员不存在'},
        '500': {'description': '服务器内部错误'}
    }
})
@admin_login_required
def get_admin_detail(admin_id):
    """获取管理员详情"""
    admin = Admin.query.get(admin_id)
    if not admin:
        return jsonify({'code': 404, 'message': '管理员不存在', 'data': None}), 404
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': admin.to_dict()
    })

@api_v1.route('/admin/admins', methods=['POST'])
@swag_from({
    'tags': ['管理员管理'],
    'summary': '创建管理员',
    'description': '创建新的管理员账户\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'body',
            'in': 'body',
            'required': True,
            'schema': {
                'type': 'object',
                'required': ['username', 'password', 'name'],
                'properties': {
                    'username': {'type': 'string', 'description': '用户名'},
                    'password': {'type': 'string', 'description': '密码'},
                    'name': {'type': 'string', 'description': '姓名'},
                    'email': {'type': 'string', 'description': '邮箱'},
                    'phone': {'type': 'string', 'description': '电话'},
                    'role_ids': {'type': 'array', 'items': {'type': 'integer'}, 'description': '角色ID列表'}
                }
            }
        }
    ],
    'responses': {
        '200': {
            'description': '创建成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '创建成功'},
                    'data': {
                        'type': 'object',
                        'properties': {
                            'id': {'type': 'integer', 'description': '管理员ID'},
                            'username': {'type': 'string', 'description': '用户名'},
                            'name': {'type': 'string', 'description': '姓名'},
                            'email': {'type': 'string', 'description': '邮箱'},
                            'phone': {'type': 'string', 'description': '电话'},
                            'is_active': {'type': 'boolean', 'description': '是否激活'},
                            'created_at': {'type': 'string', 'description': '创建时间'}
                        }
                    }
                }
            }
        },
        '400': {'description': '参数错误或用户名已存在'},
        '401': {'description': '未授权访问'},
        '500': {'description': '服务器内部错误'}
    }
})
@admin_login_required
def create_admin():
    """创建管理员"""
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')
    name = data.get('name')
    email = data.get('email')
    phone = data.get('phone')
    
    if not username or not password:
        return jsonify({'code': 400, 'message': '用户名和密码不能为空', 'data': None}), 400
    
    if Admin.query.filter_by(username=username).first():
        return jsonify({'code': 400, 'message': '用户名已存在', 'data': None}), 400
    
    if email and Admin.query.filter_by(email=email).first():
        return jsonify({'code': 400, 'message': '邮箱已存在', 'data': None}), 400
    
    if phone and Admin.query.filter_by(phone=phone).first():
        return jsonify({'code': 400, 'message': '手机号已存在', 'data': None}), 400
    
    admin = Admin(
        username=username,
        name=name,
        email=email,
        phone=phone
    )
    admin.password = password
    
    # 分配角色
    role_ids = data.get('role_ids', [])
    if role_ids:
        roles = Role.query.filter(Role.id.in_(role_ids)).all()
        for role in roles:
            admin.roles.append(role)
    
    db.session.add(admin)
    db.session.commit()
    
    return jsonify({
        'code': 200,
        'message': '创建成功',
        'data': admin.to_dict()
    })

@swag_from({
    'tags': ['管理员管理'],
    'summary': '更新管理员信息',
    'description': '更新指定管理员的信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'admin_id',
            'in': 'path',
            'type': 'integer',
            'required': True,
            'description': '管理员ID'
        },
        {
            'name': 'body',
            'in': 'body',
            'required': True,
            'schema': {
                'type': 'object',
                'properties': {
                    'name': {'type': 'string', 'description': '姓名'},
                    'email': {'type': 'string', 'description': '邮箱'},
                    'phone': {'type': 'string', 'description': '电话'},
                    'role_ids': {'type': 'array', 'items': {'type': 'integer'}, 'description': '角色ID列表'}
                }
            }
        }
    ],
    'responses': {
        '200': {'description': '更新成功'},
        '400': {'description': '参数错误'},
        '401': {'description': '未授权访问'},
        '404': {'description': '管理员不存在'},
        '500': {'description': '服务器内部错误'}
    }
})
@api_v1.route('/admin/admins/<int:admin_id>', methods=['PUT'])
@admin_login_required
def update_admin(admin_id):
    """更新管理员"""
    admin = Admin.query.get(admin_id)
    if not admin:
        return jsonify({'code': 404, 'message': '管理员不存在', 'data': None}), 404
    
    data = request.get_json()
    name = data.get('name')
    email = data.get('email')
    phone = data.get('phone')
    is_active = data.get('is_active')
    
    if email and email != admin.email and Admin.query.filter_by(email=email).first():
        return jsonify({'code': 400, 'message': '邮箱已存在', 'data': None}), 400
    
    if phone and phone != admin.phone and Admin.query.filter_by(phone=phone).first():
        return jsonify({'code': 400, 'message': '手机号已存在', 'data': None}), 400
    
    if name:
        admin.name = name
    if email:
        admin.email = email
    if phone:
        admin.phone = phone
    if is_active is not None:
        admin.is_active = is_active
    
    # 更新密码
    password = data.get('password')
    if password:
        admin.password = password
    
    # 更新角色
    role_ids = data.get('role_ids')
    if role_ids is not None:
        admin.roles = []
        roles = Role.query.filter(Role.id.in_(role_ids)).all()
        for role in roles:
            admin.roles.append(role)
    
    db.session.commit()
    
    return jsonify({
        'code': 200,
        'message': '更新成功',
        'data': admin.to_dict()
    })

@swag_from({
    'tags': ['管理员管理'],
    'summary': '删除管理员',
    'description': '删除指定的管理员账户\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'admin_id',
            'in': 'path',
            'type': 'integer',
            'required': True,
            'description': '管理员ID'
        }
    ],
    'responses': {
        '200': {'description': '删除成功'},
        '401': {'description': '未授权访问'},
        '404': {'description': '管理员不存在'},
        '500': {'description': '服务器内部错误'}
    }
})
@api_v1.route('/admin/admins/<int:admin_id>', methods=['DELETE'])
@admin_login_required
def delete_admin(admin_id):
    """删除管理员"""
    admin = Admin.query.get(admin_id)
    if not admin:
        return jsonify({'code': 404, 'message': '管理员不存在', 'data': None}), 404
    
    # 防止删除自己
    if g.admin_id == admin_id:
        return jsonify({'code': 400, 'message': '不能删除自己', 'data': None}), 400
    
    db.session.delete(admin)
    db.session.commit()
    
    return jsonify({
        'code': 200,
        'message': '删除成功',
        'data': None
    })

# 角色管理
@api_v1.route('/admin/roles', methods=['GET'])
@swag_from({
    'tags': ['角色管理'],
    'summary': '获取角色列表',
    'description': '获取系统中所有角色的列表信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'responses': {
        '200': {
            'description': '获取成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '获取成功'},
                    'data': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                'id': {'type': 'integer', 'description': '角色ID'},
                                'name': {'type': 'string', 'description': '角色名称'},
                                'description': {'type': 'string', 'description': '角色描述'},
                                'created_at': {'type': 'string', 'description': '创建时间'}
                            }
                        }
                    }
                }
            }
        },
        '401': {'description': '未授权访问'},
        '500': {'description': '服务器内部错误'}
    }
})
@admin_login_required
def get_role_list():
    """获取角色列表"""
    roles = Role.query.all()
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': [role.to_dict() for role in roles]
    })

@swag_from({
    'tags': ['角色管理'],
    'summary': '获取角色详情',
    'description': '获取指定角色的详细信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'role_id',
            'in': 'path',
            'type': 'integer',
            'required': True,
            'description': '角色ID'
        }
    ],
    'responses': {
        '200': {
            'description': '获取成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '获取成功'},
                    'data': {
                        'type': 'object',
                        'properties': {
                            'id': {'type': 'integer', 'description': '角色ID'},
                            'name': {'type': 'string', 'description': '角色名称'},
                            'description': {'type': 'string', 'description': '角色描述'},
                            'permissions': {'type': 'array', 'description': '权限列表'},
                            'created_at': {'type': 'string', 'description': '创建时间'}
                        }
                    }
                }
            }
        },
        '401': {'description': '未授权访问'},
        '404': {'description': '角色不存在'},
        '500': {'description': '服务器内部错误'}
    }
})
@api_v1.route('/admin/roles/<int:role_id>', methods=['GET'])
@admin_login_required
def get_role_detail(role_id):
    """获取角色详情"""
    role = Role.query.get(role_id)
    if not role:
        return jsonify({'code': 404, 'message': '角色不存在', 'data': None}), 404
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': role.to_dict(with_permissions=True)
    })

@swag_from({
    'tags': ['角色管理'],
    'summary': '创建角色',
    'description': '创建新的角色\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'body',
            'in': 'body',
            'required': True,
            'schema': {
                'type': 'object',
                'required': ['name'],
                'properties': {
                    'name': {'type': 'string', 'description': '角色名称'},
                    'description': {'type': 'string', 'description': '角色描述'},
                    'permission_ids': {'type': 'array', 'items': {'type': 'integer'}, 'description': '权限ID列表'}
                }
            }
        }
    ],
    'responses': {
        '200': {'description': '创建成功'},
        '400': {'description': '参数错误或角色名已存在'},
        '401': {'description': '未授权访问'},
        '500': {'description': '服务器内部错误'}
    }
})
@api_v1.route('/admin/roles', methods=['POST'])
@admin_login_required
def create_role():
    """创建角色"""
    data = request.get_json()
    name = data.get('name')
    description = data.get('description')
    
    if not name:
        return jsonify({'code': 400, 'message': '角色名称不能为空', 'data': None}), 400
    
    if Role.query.filter_by(name=name).first():
        return jsonify({'code': 400, 'message': '角色名称已存在', 'data': None}), 400
    
    role = Role(name=name, description=description)
    
    # 分配权限
    permission_ids = data.get('permission_ids', [])
    if permission_ids:
        permissions = Permission.query.filter(Permission.id.in_(permission_ids)).all()
        for permission in permissions:
            role.permissions.append(permission)
    
    db.session.add(role)
    db.session.commit()
    
    return jsonify({
        'code': 200,
        'message': '创建成功',
        'data': role.to_dict()
    })

@swag_from({
    'tags': ['角色管理'],
    'summary': '更新角色',
    'description': '更新指定角色的信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'role_id',
            'in': 'path',
            'type': 'integer',
            'required': True,
            'description': '角色ID'
        },
        {
            'name': 'body',
            'in': 'body',
            'schema': {
                'type': 'object',
                'properties': {
                    'name': {'type': 'string', 'description': '角色名称'},
                    'description': {'type': 'string', 'description': '角色描述'},
                    'permission_ids': {'type': 'array', 'items': {'type': 'integer'}, 'description': '权限ID列表'}
                }
            }
        }
    ],
    'responses': {
        '200': {'description': '更新成功'},
        '400': {'description': '参数错误或角色名已存在'},
        '401': {'description': '未授权访问'},
        '404': {'description': '角色不存在'},
        '500': {'description': '服务器内部错误'}
    }
})
@api_v1.route('/admin/roles/<int:role_id>', methods=['PUT'])
@admin_login_required
def update_role(role_id):
    """更新角色"""
    role = Role.query.get(role_id)
    if not role:
        return jsonify({'code': 404, 'message': '角色不存在', 'data': None}), 404
    
    data = request.get_json()
    name = data.get('name')
    description = data.get('description')
    
    if name and name != role.name and Role.query.filter_by(name=name).first():
        return jsonify({'code': 400, 'message': '角色名称已存在', 'data': None}), 400
    
    if name:
        role.name = name
    if description:
        role.description = description
    
    # 更新权限
    permission_ids = data.get('permission_ids')
    if permission_ids is not None:
        role.permissions = []
        permissions = Permission.query.filter(Permission.id.in_(permission_ids)).all()
        for permission in permissions:
            role.permissions.append(permission)
    
    db.session.commit()
    
    return jsonify({
        'code': 200,
        'message': '更新成功',
        'data': role.to_dict()
    })

@swag_from({
    'tags': ['角色管理'],
    'summary': '删除角色',
    'description': '删除指定的角色\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'parameters': [
        {
            'name': 'role_id',
            'in': 'path',
            'type': 'integer',
            'required': True,
            'description': '角色ID'
        }
    ],
    'responses': {
        '200': {'description': '删除成功'},
        '401': {'description': '未授权访问'},
        '404': {'description': '角色不存在'},
        '500': {'description': '服务器内部错误'}
    }
})
@api_v1.route('/admin/roles/<int:role_id>', methods=['DELETE'])
@admin_login_required
def delete_role(role_id):
    """删除角色"""
    role = Role.query.get(role_id)
    if not role:
        return jsonify({'code': 404, 'message': '角色不存在', 'data': None}), 404
    
    db.session.delete(role)
    db.session.commit()
    
    return jsonify({
        'code': 200,
        'message': '删除成功',
        'data': None
    })

# 权限管理
@api_v1.route('/admin/permissions', methods=['GET'])
@swag_from({
    'tags': ['权限管理'],
    'summary': '获取权限列表',
    'description': '获取系统中所有权限的列表信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'responses': {
        '200': {
            'description': '获取成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '获取成功'},
                    'data': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                'id': {'type': 'integer', 'description': '权限ID'},
                                'name': {'type': 'string', 'description': '权限名称'},
                                'code': {'type': 'string', 'description': '权限代码'},
                                'description': {'type': 'string', 'description': '权限描述'},
                                'created_at': {'type': 'string', 'description': '创建时间'}
                            }
                        }
                    }
                }
            }
        },
        '401': {'description': '未授权访问'},
        '500': {'description': '服务器内部错误'}
    }
})
@admin_login_required
def get_permission_list():
    """获取权限列表"""
    permissions = Permission.query.all()
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': [permission.to_dict() for permission in permissions]
    })

# API接口列表
@api_v1.route('/admin/api/list', methods=['GET'])
@swag_from({
    'tags': ['系统管理'],
    'summary': '获取API接口列表',
    'description': '获取系统中所有API接口的列表信息\n\n**🔐 需要管理员Token认证**\n\n**接口状态：已测试✅**',
    'security': [{'Bearer': []}],
    'responses': {
        '200': {
            'description': '获取成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'integer', 'example': 200},
                    'message': {'type': 'string', 'example': '获取成功'},
                    'data': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                'name': {'type': 'string', 'description': '接口名称'},
                                'method': {'type': 'string', 'description': 'HTTP方法'},
                                'url': {'type': 'string', 'description': '接口URL'},
                                'description': {'type': 'string', 'description': '接口描述'}
                            }
                        }
                    }
                }
            }
        },
        '401': {'description': '未授权访问'},
        '500': {'description': '服务器内部错误'}
    }
})
@admin_login_required
def get_api_list():
    """获取API接口列表"""
    api_list = [
        # 管理员接口
        {'name': '管理员登录', 'method': 'POST', 'url': '/api/v1/admin/login', 'description': '管理员登录认证'},
        {'name': '获取管理员信息', 'method': 'GET', 'url': '/api/v1/admin/info', 'description': '获取当前登录管理员信息'},
        {'name': '获取管理员列表', 'method': 'GET', 'url': '/api/v1/admin/admins', 'description': '获取所有管理员列表'},
        {'name': '获取管理员详情', 'method': 'GET', 'url': '/api/v1/admin/admins/<admin_id>', 'description': '获取指定管理员详情'},
        {'name': '创建管理员', 'method': 'POST', 'url': '/api/v1/admin/admins', 'description': '创建新管理员'},
        {'name': '更新管理员', 'method': 'PUT', 'url': '/api/v1/admin/admins/<admin_id>', 'description': '更新指定管理员'},
        {'name': '删除管理员', 'method': 'DELETE', 'url': '/api/v1/admin/admins/<admin_id>', 'description': '删除指定管理员'},
        
        # 角色接口
        {'name': '获取角色列表', 'method': 'GET', 'url': '/api/v1/admin/roles', 'description': '获取所有角色列表'},
        {'name': '获取角色详情', 'method': 'GET', 'url': '/api/v1/admin/roles/<role_id>', 'description': '获取指定角色详情'},
        {'name': '创建角色', 'method': 'POST', 'url': '/api/v1/admin/roles', 'description': '创建新角色'},
        {'name': '更新角色', 'method': 'PUT', 'url': '/api/v1/admin/roles/<role_id>', 'description': '更新指定角色'},
        {'name': '删除角色', 'method': 'DELETE', 'url': '/api/v1/admin/roles/<role_id>', 'description': '删除指定角色'},
        
        # 权限接口
        {'name': '获取权限列表', 'method': 'GET', 'url': '/api/v1/admin/permissions', 'description': '获取所有权限列表'},
        
        # 场馆管理接口
        {'name': '获取场馆列表', 'method': 'GET', 'url': '/api/v1/admin/venues', 'description': '获取所有场馆列表'},
        {'name': '获取场馆详情', 'method': 'GET', 'url': '/api/v1/admin/venues/<venue_id>', 'description': '获取指定场馆详情'},
        {'name': '创建场馆', 'method': 'POST', 'url': '/api/v1/admin/venues', 'description': '创建新场馆'},
        {'name': '更新场馆', 'method': 'PUT', 'url': '/api/v1/admin/venues/<venue_id>', 'description': '更新指定场馆'},
        {'name': '删除场馆', 'method': 'DELETE', 'url': '/api/v1/admin/venues/<venue_id>', 'description': '删除指定场馆'},
        
        # 活动管理接口
        {'name': '获取活动列表', 'method': 'GET', 'url': '/api/v1/admin/activities', 'description': '管理员获取所有活动列表'},
        {'name': '获取活动详情', 'method': 'GET', 'url': '/api/v1/admin/activities/<activity_id>', 'description': '获取指定活动详情'},
        {'name': '创建活动', 'method': 'POST', 'url': '/api/v1/admin/activities', 'description': '管理员创建新活动'},
        {'name': '更新活动', 'method': 'PUT', 'url': '/api/v1/admin/activities/<activity_id>', 'description': '更新指定活动信息'},
        {'name': '删除活动', 'method': 'DELETE', 'url': '/api/v1/admin/activities/<activity_id>', 'description': '删除指定活动'},
        {'name': '获取活动统计', 'method': 'GET', 'url': '/api/v1/admin/activities/statistics', 'description': '获取活动统计数据'},
        {'name': '获取参与者列表', 'method': 'GET', 'url': '/api/v1/admin/activities/<activity_id>/participants', 'description': '获取活动参与者列表'},
        {'name': '移除参与者', 'method': 'DELETE', 'url': '/api/v1/admin/activities/<activity_id>/participants/<user_id>', 'description': '移除活动参与者'},
        
        # 用户接口
        {'name': '用户登录', 'method': 'POST', 'url': '/api/v1/user/login', 'description': '用户微信登录'},
        {'name': '获取用户信息', 'method': 'GET', 'url': '/api/v1/user/info', 'description': '获取当前登录用户信息'},
        {'name': '更新用户信息', 'method': 'PUT', 'url': '/api/v1/user/info', 'description': '更新当前登录用户信息'},
        
        # 场馆预约接口
        {'name': '获取场馆列表', 'method': 'GET', 'url': '/api/v1/venues', 'description': '获取所有场馆列表'},
        {'name': '获取场馆详情', 'method': 'GET', 'url': '/api/v1/venues/<venue_id>', 'description': '获取指定场馆详情'},
        {'name': '获取场馆时间段', 'method': 'GET', 'url': '/api/v1/venues/<venue_id>/timeslots', 'description': '获取指定场馆可预约时间段'},
        
        # 用户活动接口
        {'name': '获取活动列表', 'method': 'GET', 'url': '/api/v1/user/activities', 'description': '用户获取活动列表'},
        {'name': '获取活动详情', 'method': 'GET', 'url': '/api/v1/user/activities/<activity_id>', 'description': '获取指定活动详情'},
        {'name': '参加活动', 'method': 'POST', 'url': '/api/v1/user/activities/<activity_id>/join', 'description': '用户参加活动'},
        {'name': '退出活动', 'method': 'DELETE', 'url': '/api/v1/user/activities/<activity_id>/leave', 'description': '用户退出活动'},
        {'name': '标记用户关系', 'method': 'POST', 'url': '/api/v1/user/activities/<activity_id>/relations', 'description': '标记与其他用户的关系'},
        
        # 支付接口
        {'name': '创建支付', 'method': 'POST', 'url': '/api/v1/payments', 'description': '为订单创建支付'},
        {'name': '查询支付状态', 'method': 'GET', 'url': '/api/v1/payments/<payment_id>', 'description': '查询指定支付状态'},
        {'name': '支付回调', 'method': 'POST', 'url': '/api/v1/payments/notify', 'description': '微信支付回调接口'},
    ]
    
    return jsonify({
        'code': 200,
        'message': '获取成功',
        'data': api_list
    }) 